﻿Type.registerNamespace("MoniMisi2");

MoniMisi2.ProveedorRegistroServidor = function(element) {
    MoniMisi2.ProveedorRegistroServidor.initializeBase(this, [element]);
    this.WebMethod = null;
    this.DelConsultaOK = Function.createDelegate(this, this.ConsultaOK);
    this.DelConsultaError = Function.createDelegate(this, this.ConsultaError);
    this.Argumentos = null;
    this.Asincronico = null;
    this.Registro = null;
    this.Accion = null;
    this.Mensaje = null;
    this.Esperando = false;
    this.Estructura = null;
    this.Funciones = new MoniMisi2.Funciones();
};

MoniMisi2.ProveedorRegistroServidor.prototype = {
    initialize: function() {
        MoniMisi2.ProveedorRegistroServidor.callBaseMethod(this, 'initialize');
        this.Contrato = function(pRegistro, pAccion, pMensaje) {
            this.Registro = pRegistro;
            this.Accion = pAccion;
            this.Mensaje = pMensaje;
        }
    },

    dispose: function() {
        MoniMisi2.ProveedorRegistroServidor.callBaseMethod(this, 'dispose');
    },
    Enviar: function() {
        var Contrato = new this.Contrato(this.Registro, this.Accion, this.Mensaje);
        this.ConsultaServidor(Contrato)
    },
    ConsultaServidor: function(pContrato) {
        this.Esperando = true;
        this.Funciones.InvocarWebMethod(this.WebMethod, { pContrato: pContrato }, this.DelConsultaOK, this.DelConsultaError, this.Asincronico);
    },
    ConsultaOK: function(pDatos) {
        this.Esperando = false;
        if (pDatos.Registro != undefined) {
            this.Registro = pDatos.Registro
            this.Accion = pDatos.Accion;
            this.Mensaje = pDatos.Mensaje;
            var h = this.get_events().getHandler('Recibido');
            if (h) {
                var Contrato = new this.Contrato(this.Registro, this.Accion, this.Mensaje);
                h(this, Contrato)
            };

        }
    },
    ConsultaError: function(pError) {
        this.Esperando = false;
        var h = this.get_events().getHandler("Errado");
        if (h) {
            h(this, pError.Message)
        } else {
            alert("Error en Servidor: " + pError.Message)
        };
    },
    Clonar: function() {
        return this.Funciones.Clonar(this.Registro);
    },
    RegistroBlanco: function() {
        return this.Funciones.Clonar(this.Registro, true);
    },

    get_WebMethod: function() {
        return this.WebMethod;

    },
    set_WebMethod: function(value) {
        if (this.WebMethod !== value) {
            this.WebMethod = value;
            this.raisePropertyChanged('WebMethod');
        }
    },
    get_Registro: function() {
        return this.Registro;

    },
    set_Registro: function(value) {
        if (this.Registro !== value) {
            this.Registro = value;
            this.raisePropertyChanged('Registro');
        }
    },


    get_Asincronico: function() {
        return this.Asincronico;

    },
    set_Asincronico: function(value) {
        if (this.Asincronico !== value) {
            this.Asincronico = value;
            this.raisePropertyChanged('Asincronico');
        }
    },
    add_Errado: function(handler) {
        this.get_events().addHandler('Errado', handler);
    },
    remove_Errado: function(handler) {
        this.get_events().removeHandler('Errado', handler);
    },
    add_Recibido: function(handler) {
        this.get_events().addHandler('Recibido', handler);
    },
    remove_Recibido: function(handler) {
        this.get_events().removeHandler('Recibido', handler);
    }
};


MoniMisi2.ProveedorRegistroServidor.registerClass('MoniMisi2.ProveedorRegistroServidor', Sys.UI.Control);

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();